package com.snopy.leetcode.index1_1000.index1_100;

import com.snopy.leetcode.TreeNode;
import com.snopy.utils.DataFactoryUtil;

/**
 * @author snopy
 * @version 1.0.0
 * @classname Question98
 * @description 验证BST
 * 给你一个二叉树的根节点 root ，判断其是否是一个有效的二叉搜索树。
 *
 * 有效 二叉搜索树定义如下：
 *
 * 节点的左子树只包含 小于 当前节点的数。
 * 节点的右子树只包含 大于 当前节点的数。
 * 所有左子树和右子树自身必须也是二叉搜索树。
 * @email 77912204@qq.com
 * @date 2022/05/01 10:43
 */
public class Question98 {


    public static void main(String[] args) {
        Integer[] nums = new Integer[]{2,2,2};
        TreeNode root = DataFactoryUtil.buildTree(nums);
        boolean flag = new Question98().isValidBST(root);
        System.out.println(flag);
    }
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root,null,null);
    }
    public boolean isValidBST(TreeNode root,Integer lower,Integer upper) {
        if (root==null){
            return true;
        }
        if ((lower!=null && root.val <= lower) || (upper!=null && root.val >= upper)){
            return false;
        }
        return isValidBST(root.left,lower,root.val)&&isValidBST(root.right,root.val,upper);
    }

}
